+Mon Feb 18 16:44:00 2002 Owen Taylor <otaylor@redhat.com>
+
+ * docs/widget_system.txt: Add some docs for GTK_NEED_REQUEST
+ GTK_NEED_ALLOCATION.
+
+ * gtk/gtkmenu.c (gtk_menu_popup): Scroll the menu
+ to the right place before showing the menu to
+ avoid spurious enter events.
+
+ * gtk/gtkmenu.c (gtk_menu_realize): Only scroll
+ if there is an active menu item.
+
+ * gtk/gtkwidget.c (gtk_widget_init): Set RESIZE_NEEDED
+ ALLOC_NEEDED initially.
+
2002-02-18 Matthias Clasen <maclas@gmx.de>
* NEWS: fix version number.
* gtk/gtkcombo.c (gtk_combo_popdown_list): Fix problems
with stuck grab (#60132, reported by Nicolas Setton) and
- stuck prelighting combine some common code for button release
- and pressing Escape.
+ stuck prelighting. Combine duplicated code in three
+ places for popping down the list.
Mon Feb 18 14:17:59 2002 Owen Taylor <otaylor@redhat.com>
+Mon Feb 18 16:44:00 2002 Owen Taylor <otaylor@redhat.com>
+
+ * docs/widget_system.txt: Add some docs for GTK_NEED_REQUEST
+ GTK_NEED_ALLOCATION.
+
+ * gtk/gtkmenu.c (gtk_menu_popup): Scroll the menu
+ to the right place before showing the menu to
+ avoid spurious enter events.
+
+ * gtk/gtkmenu.c (gtk_menu_realize): Only scroll
+ if there is an active menu item.
+
+ * gtk/gtkwidget.c (gtk_widget_init): Set RESIZE_NEEDED
+ ALLOC_NEEDED initially.
+
2002-02-18 Matthias Clasen <maclas@gmx.de>
* NEWS: fix version number.
* gtk/gtkcombo.c (gtk_combo_popdown_list): Fix problems
with stuck grab (#60132, reported by Nicolas Setton) and
- stuck prelighting combine some common code for button release
- and pressing Escape.
+ stuck prelighting. Combine duplicated code in three
+ places for popping down the list.
Mon Feb 18 14:17:59 2002 Owen Taylor <otaylor@redhat.com>
+Mon Feb 18 16:44:00 2002 Owen Taylor <otaylor@redhat.com>
+
+ * docs/widget_system.txt: Add some docs for GTK_NEED_REQUEST
+ GTK_NEED_ALLOCATION.
+
+ * gtk/gtkmenu.c (gtk_menu_popup): Scroll the menu
+ to the right place before showing the menu to
+ avoid spurious enter events.
+
+ * gtk/gtkmenu.c (gtk_menu_realize): Only scroll
+ if there is an active menu item.
+
+ * gtk/gtkwidget.c (gtk_widget_init): Set RESIZE_NEEDED
+ ALLOC_NEEDED initially.
+
2002-02-18 Matthias Clasen <maclas@gmx.de>
* NEWS: fix version number.
* gtk/gtkcombo.c (gtk_combo_popdown_list): Fix problems
with stuck grab (#60132, reported by Nicolas Setton) and
- stuck prelighting combine some common code for button release
- and pressing Escape.
+ stuck prelighting. Combine duplicated code in three
+ places for popping down the list.
Mon Feb 18 14:17:59 2002 Owen Taylor <otaylor@redhat.com>
+Mon Feb 18 16:44:00 2002 Owen Taylor <otaylor@redhat.com>
+
+ * docs/widget_system.txt: Add some docs for GTK_NEED_REQUEST
+ GTK_NEED_ALLOCATION.
+
+ * gtk/gtkmenu.c (gtk_menu_popup): Scroll the menu
+ to the right place before showing the menu to
+ avoid spurious enter events.
+
+ * gtk/gtkmenu.c (gtk_menu_realize): Only scroll
+ if there is an active menu item.
+
+ * gtk/gtkwidget.c (gtk_widget_init): Set RESIZE_NEEDED
+ ALLOC_NEEDED initially.
+
2002-02-18 Matthias Clasen <maclas@gmx.de>
* NEWS: fix version number.
* gtk/gtkcombo.c (gtk_combo_popdown_list): Fix problems
with stuck grab (#60132, reported by Nicolas Setton) and
- stuck prelighting combine some common code for button release
- and pressing Escape.
+ stuck prelighting. Combine duplicated code in three
+ places for popping down the list.
Mon Feb 18 14:17:59 2002 Owen Taylor <otaylor@redhat.com>
+Mon Feb 18 16:44:00 2002 Owen Taylor <otaylor@redhat.com>
+
+ * docs/widget_system.txt: Add some docs for GTK_NEED_REQUEST
+ GTK_NEED_ALLOCATION.
+
+ * gtk/gtkmenu.c (gtk_menu_popup): Scroll the menu
+ to the right place before showing the menu to
+ avoid spurious enter events.
+
+ * gtk/gtkmenu.c (gtk_menu_realize): Only scroll
+ if there is an active menu item.
+
+ * gtk/gtkwidget.c (gtk_widget_init): Set RESIZE_NEEDED
+ ALLOC_NEEDED initially.
+
2002-02-18 Matthias Clasen <maclas@gmx.de>
* NEWS: fix version number.
* gtk/gtkcombo.c (gtk_combo_popdown_list): Fix problems
with stuck grab (#60132, reported by Nicolas Setton) and
- stuck prelighting combine some common code for button release
- and pressing Escape.
+ stuck prelighting. Combine duplicated code in three
+ places for popping down the list.
Mon Feb 18 14:17:59 2002 Owen Taylor <otaylor@redhat.com>
+Mon Feb 18 16:44:00 2002 Owen Taylor <otaylor@redhat.com>
+
+ * docs/widget_system.txt: Add some docs for GTK_NEED_REQUEST
+ GTK_NEED_ALLOCATION.
+
+ * gtk/gtkmenu.c (gtk_menu_popup): Scroll the menu
+ to the right place before showing the menu to
+ avoid spurious enter events.
+
+ * gtk/gtkmenu.c (gtk_menu_realize): Only scroll
+ if there is an active menu item.
+
+ * gtk/gtkwidget.c (gtk_widget_init): Set RESIZE_NEEDED
+ ALLOC_NEEDED initially.
+
2002-02-18 Matthias Clasen <maclas@gmx.de>
* NEWS: fix version number.
* gtk/gtkcombo.c (gtk_combo_popdown_list): Fix problems
with stuck grab (#60132, reported by Nicolas Setton) and
- stuck prelighting combine some common code for button release
- and pressing Escape.
+ stuck prelighting. Combine duplicated code in three
+ places for popping down the list.
Mon Feb 18 14:17:59 2002 Owen Taylor <otaylor@redhat.com>
+Mon Feb 18 16:44:00 2002 Owen Taylor <otaylor@redhat.com>
+
+ * docs/widget_system.txt: Add some docs for GTK_NEED_REQUEST
+ GTK_NEED_ALLOCATION.
+
+ * gtk/gtkmenu.c (gtk_menu_popup): Scroll the menu
+ to the right place before showing the menu to
+ avoid spurious enter events.
+
+ * gtk/gtkmenu.c (gtk_menu_realize): Only scroll
+ if there is an active menu item.
+
+ * gtk/gtkwidget.c (gtk_widget_init): Set RESIZE_NEEDED
+ ALLOC_NEEDED initially.
+
2002-02-18 Matthias Clasen <maclas@gmx.de>
* NEWS: fix version number.
* gtk/gtkcombo.c (gtk_combo_popdown_list): Fix problems
with stuck grab (#60132, reported by Nicolas Setton) and
- stuck prelighting combine some common code for button release
- and pressing Escape.
+ stuck prelighting. Combine duplicated code in three
+ places for popping down the list.
Mon Feb 18 14:17:59 2002 Owen Taylor <otaylor@redhat.com>
to have this flag set to prevent natural unrealization on the
process of getting unparented.
+GTK_NEED_REQUEST:
+ This flag is set if the widget doesn't have an up to date
+ requisition. If this flag is set, we must actually emit ::size-request
+ when gtk_widget_size_request() is called. Otherwise, we can
+ simply widget->requisition. We keep track of this all the time
+ howevever, widgets with this flag set are only added to the resize
+ queue if they are viewable.
+
+GTK_NEED_ALLOCATION:
+ This flag is set if the widget doesn't have an up to date
+ allocation. If this flag is set, we must actually emit ::size-allocate
+ when gtk_widget_size_allocate() is called, even if the new allocation
+ is the same as the current allocation.
+
Related Macros:
GTK_WIDGET_DRAWABLE:
menu->position_func_data = data;
menu_shell->activate_time = activate_time;
- gtk_menu_position (menu);
-
- /* We need to show the menu _here_ because code expects to be
- * able to tell if the menu is onscreen by looking at the
- * GTK_WIDGET_VISIBLE (menu)
+ /* We need to show the menu here rather in the init function because
+ * code expects to be able to tell if the menu is onscreen by
+ * looking at the GTK_WIDGET_VISIBLE (menu)
*/
gtk_widget_show (GTK_WIDGET (menu));
- gtk_widget_show (menu->toplevel);
+
+ /* Compute the size of the toplevel and realize it so we
+ * can position and scroll correctly.
+ */
+ {
+ GtkRequisition tmp_request;
+ GtkAllocation tmp_allocation = { 0, };
+
+ gtk_widget_size_request (menu->toplevel, &tmp_request);
+
+ tmp_allocation.width = tmp_request.width;
+ tmp_allocation.height = tmp_request.height;
+
+ gtk_widget_size_allocate (menu->toplevel, &tmp_allocation);
+
+ gtk_widget_realize (GTK_WIDGET (menu));
+ }
+
+ gtk_menu_position (menu);
gtk_menu_scroll_to (menu, menu->scroll_offset);
+ /* Once everything is set up correctly, map the toplevel window on
+ the screen.
+ */
+ gtk_widget_show (menu->toplevel);
+
if (xgrab_shell == widget)
popup_grab_on_window (widget->window, activate_time); /* Should always succeed */
gtk_style_set_background (widget->style, menu->view_window, GTK_STATE_NORMAL);
gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL);
- gtk_menu_scroll_item_visible (GTK_MENU_SHELL (widget),
- GTK_MENU_SHELL (widget)->active_menu_item);
+ if (GTK_MENU_SHELL (widget)->active_menu_item)
+ gtk_menu_scroll_item_visible (GTK_MENU_SHELL (widget),
+ GTK_MENU_SHELL (widget)->active_menu_item);
gdk_window_show (menu->bin_window);
gdk_window_show (menu->view_window);
GTK_DOUBLE_BUFFERED);
GTK_PRIVATE_SET_FLAG (widget, GTK_REDRAW_ON_ALLOC);
+ GTK_PRIVATE_SET_FLAG (widget, GTK_REQUEST_NEEDED);
+ GTK_PRIVATE_SET_FLAG (widget, GTK_ALLOC_NEEDED);
widget->style = gtk_widget_get_default_style ();
g_object_ref (widget->style);